package com.miplus.ccrm.workflow.js;

import com.alibaba.fastjson.JSONObject;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.InputStream;
import java.util.Scanner;

/**
 * LogicFlowToJSConverter测试类
 * 用于验证工作流JSON到JavaScript代码的转换功能
 */
public class LogicFlowToJSConverterTest {

    // 输入JSON文件路径（常量定义，便于维护）
    private static final String DEFAULT_WORKFLOW_JSON_PATH =
            "D:/javacode/miplus/zhongxing/ccrm/ccrm-workflow/src/main/java/com/miplus/ccrm/workflow/json/default_workflow_zh.json";

    // 预览字符长度
    private static final int PREVIEW_LENGTH = 1000;

    public static void main(String[] args) {
        try {
            // 1. 读取JSON文件内容
            String jsonContent = readJsonFile(DEFAULT_WORKFLOW_JSON_PATH);

            // 2. 解析JSON对象
            JSONObject logicFlowJson = JSONObject.parseObject(jsonContent);

            // 3. 转换为JS代码
            String jsCode = LogicFlowToJSConverter.convertToJS(logicFlowJson);

            // 4. 输出结果信息（不生成文件）
            printResultInfo(jsCode);

        } catch (Exception e) {
            System.err.println("转换过程失败：" + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 读取JSON文件内容
     * @param filePath 文件路径
     * @return 文件内容字符串
     * @throws Exception 读取文件时发生的异常
     */
    private static String readJsonFile(String filePath) throws Exception {
        Path path = Paths.get(filePath);
        byte[] fileBytes = Files.readAllBytes(path);
        return new String(fileBytes, StandardCharsets.UTF_8);
    }

    /**
     * 打印转换结果信息和代码预览（不生成文件）
     * @param jsCode 生成的JS代码
     */
    private static void printResultInfo(String jsCode) {
        System.out.println("JavaScript代码转换完成：");
        System.out.println("==========================");

        // 截取预览内容
        int displayLength = Math.min(jsCode.length(), PREVIEW_LENGTH);
        String preview = jsCode.substring(0, displayLength);
        System.out.println(preview);

        // 显示截断提示
        if (jsCode.length() > PREVIEW_LENGTH) {
            System.out.println("\n...（代码过长，已截断显示，完整长度：" + jsCode.length() + "字符）");
        }
    }

    /**
     * 将输入流转换为字符串
     * @param inputStream 输入流
     * @return 转换后的字符串
     */
    private static String convertStreamToString(InputStream inputStream) {
        try (Scanner scanner = new Scanner(inputStream, StandardCharsets.UTF_8.name()).useDelimiter("\\A")) {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
}